/*
 * ListenerJTreePersonal.java
 *
 * Created on 27 de diciembre de 2005, 17:08
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package fmap.gui.actionListener;

import javax.swing.tree.TreePath;
import java.awt.event.MouseAdapter;
import javax.swing.JPopupMenu;

import fmap.DatosCompartidos;
import fmap.actions.collection.GetMapFCollecionAction;
import fmap.actions.mapF.loadResultSearch.LoadResultSearchMapFAction;
import fmap.gui.JFrameEditCollection;
import fmap.gui.jTreePersonal.TreeModelPersonal;
import fmap.model.Collection;
import fmap.model.MapF;
import java.awt.Cursor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Vector;
import javax.swing.JOptionPane;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;

/**
 *
 * @author javi
 */
public class ListenerJTreePersonal extends MouseAdapter implements ActionListener,TreeSelectionListener
{
    JPopupMenu popup;
    
    /** Creates a new instance of ListenerDynamicTree */
    public ListenerJTreePersonal ( JPopupMenu _popup )
    {
        this.popup          = _popup;
    }
    
    /** Creates a new instance of ListenerDynamicTree */
    public ListenerJTreePersonal ()
    {
    }
    
    public void valueChanged (TreeSelectionEvent e)
    {
        
        try
        {
            DatosCompartidos.getJFrameMain ().setCursor ( new Cursor (Cursor.WAIT_CURSOR) );
            
            TreePath nodoSeleccionado = e.getPath ();
            
            if( nodoSeleccionado != null )
            {
                Object nodo = (Object)nodoSeleccionado.getLastPathComponent ();
                
                if( nodo instanceof fmap.model.MapF )
                {
                    // Mostramos en el panel derecho el card del mapa de ficheros
                    java.awt.CardLayout layout = (java.awt.CardLayout)DatosCompartidos.getPanelRight ().getLayout ();
                    layout.show (DatosCompartidos.getPanelRight (), "cardMapF");
                    // --------------------------------------------------------
                    
                    DatosCompartidos.getJFrameMain ().getPestana ().setEnabledAt (1, true);
                    fmap.model.MapF mapF = (fmap.model.MapF)nodo;
                    
                    
                    DatosCompartidos.setMapFActual ( mapF );
                    
                    
                    if ( DatosCompartidos.getJFrameMain ().getPestana ().getSelectedIndex () == 1 )
                    {
                        // Llamamos al action encargado de cargar los resultados
                        new LoadResultSearchMapFAction ( mapF );
                    }
                    

                    // Si no estan cargados los nodos en memoria los cargamos
                    if ( mapF.getVNode ().size ()==0 )
                    {
                        Vector v = new fmap.dao.NodeDao ().selectNodes ( mapF.getIdMapF (), -1, mapF.getIdTable () );
                        mapF.setVNode ( v );
                    }
                    
                    DatosCompartidos.getJTablePersonal ().setData ( mapF.getVNodeTable () );
                    DatosCompartidos.getJTablePersonal ().setVisible (true);
                    
                    
                    
                    DatosCompartidos.getPanelRight ().updatePanelRight ( mapF ); // Actualizamos el panel dcho con la informacion del nodo
                    
                }
                else if(nodo instanceof fmap.model.Node)
                {
                    // Mostramos en el panel derecho el card de los nodos
                    java.awt.CardLayout layout = (java.awt.CardLayout)DatosCompartidos.getPanelRight ().getLayout ();
                    layout.show (DatosCompartidos.getPanelRight (), "cardNode");
                    // --------------------------------------------------------
                    
                    fmap.model.Node n = (fmap.model.Node)nodo;
                    
                    // Si los nodos de este nodo no estan cargados en memoria los cargamos
                    if ( n.getVNode ().size ()==0 )
                    {
                        Vector v = new fmap.dao.NodeDao ().selectNodes ( n.getIdMapF (), n.getIdNode (), n.getIdTableSub () );
                        n.setNode ( v );
                    }
                    
                    DatosCompartidos.getJTablePersonal ().setData ( n.getVNodeTable () );
                    
                    DatosCompartidos.setNodeActual ( n );
                    
                    DatosCompartidos.getPanelRight ().updatePanelRight ( n );
                }
                else if( nodo instanceof Collection )
                {
                    // Mostramos en el panel derecho el card de los nodos
                    java.awt.CardLayout layout = (java.awt.CardLayout)DatosCompartidos.getPanelRight ().getLayout ();
                    layout.show (DatosCompartidos.getPanelRight (), "cardCollection");
                    // --------------------------------------------------------
                    
                    Collection n = (Collection)nodo;
                    
                    DatosCompartidos.getPanelRight ().getTextFCollectionTitulo ().setText ( n.getName () );
                    DatosCompartidos.getPanelRight ().getTextPCollectionDesc ().setText ( n.getDesc () );
                }
                
            }
            
            DatosCompartidos.getJFrameMain ().setCursor ( new Cursor (Cursor.DEFAULT_CURSOR) );
        }
        catch(Exception ex)
        {
            System.out.println ("el error es "  + ex.toString ());
        }
        
        
    }
    
    
    
    /**
     * Estos son los metodos que implementan la interfaz ActionListener para dar respuesta a los eventos
     * del menupopup que sale pulsando el boton dcho del raton
     */
    public void actionPerformed (ActionEvent ae)
    {
        
        TreePath nodoSeleccionado = DatosCompartidos.getJTreePersonal ().getSelectionPath ();
        
        /** Si hemos seleccionado algun mapa de ficheros */
        if( nodoSeleccionado != null )
        {
            Object nodo = (Object)nodoSeleccionado.getLastPathComponent ();
            
            if( nodo instanceof fmap.model.MapF )
            {
                fmap.model.MapF cd = (fmap.model.MapF)nodo;
                
                if( ae.getActionCommand ().equals ("eliminar") )
                {
                    int opcion = JOptionPane.showConfirmDialog (DatosCompartidos.getJFrameAdminCollection (),
                            "¿Esta seguro de eliminar este volumen de ficheros?",
                            "Eliminar volumen de ficheros",
                            JOptionPane.YES_NO_OPTION);
                    
                    if( opcion != 1 )
                    {
                        // Si hemos pulsado el boton de eliminar, eliminamos el mapa de ficheros seleccionado
                        new fmap.actions.mapF.DeleteMapFAction ( cd.getId () );
                        
                        MapF[] vMapF = new GetMapFCollecionAction ().GetMapFCollecionAction ( DatosCompartidos.getCollectionActual ().getId () );
                        
                        DatosCompartidos.getCollectionActual ().setMapF ( vMapF );
                        
                        TreeModelPersonal tmp = new TreeModelPersonal ( DatosCompartidos.getCollectionActual () );
                        DatosCompartidos.getJTreePersonal ().setModel ( tmp );
                    }
                }
            }
            else if( nodo instanceof fmap.model.Collection )
            {
                if ( ae.getActionCommand ().equals ("editar") )
                {
                    new JFrameEditCollection ().setTitle ( "Editando colección: "+DatosCompartidos.getCollectionActual ().getName () );
                }
                else if ( ae.getActionCommand ().equals ("ord_a_nombre") )
                {
                    DatosCompartidos.ordenMapF = 1;
                    // Ordenamos los mapas de ficheros del JTree ascendentemente por el nombre
                    
                    MapF[] vMapF = DatosCompartidos.getCollectionActual ().getMapF ();
                    
                    // Creamos una lista a partir del array de mapas de ficheros para poder ordenarlos
                    List list = new ArrayList (Arrays.asList (vMapF));
                    // Los ordenamos
                    Collections.sort (list);
                    
                    // Volvemos a convertir la lista en un array de mapas de ficheros para poder enviarlos al JTreePersonal
                    vMapF = (fmap.model.MapF[])list.toArray (new fmap.model.MapF[list.size ()]);
                    
                    DatosCompartidos.getCollectionActual ().setMapF ( vMapF );
                    
                    TreeModelPersonal tmp = new TreeModelPersonal (DatosCompartidos.getCollectionActual ());
                    DatosCompartidos.getJTreePersonal ().setModel (tmp);
                }
                else if ( ae.getActionCommand ().equals ("ord_d_nombre") )
                {
                    DatosCompartidos.ordenMapF = 2;
                    
                    // Ordenamos los mapas de ficheros del JTree ascendentemente por el numero de resultados de la busqueda
                    
                    MapF[] vMapF = DatosCompartidos.getCollectionActual ().getMapF ();
                    
                    // Creamos una lista a partir del array de mapas de ficheros para poder ordenarlos
                    List list = new ArrayList (Arrays.asList (vMapF));
                    // Los ordenamos
                    Collections.sort (list);
                    
                    // Volvemos a convertir la lista en un array de mapas de ficheros para poder enviarlos al JTreePersonal
                    vMapF = (fmap.model.MapF[])list.toArray (new fmap.model.MapF[list.size ()]);
                    
                    DatosCompartidos.getCollectionActual ().setMapF ( vMapF );
                    
                    TreeModelPersonal tmp = new TreeModelPersonal (DatosCompartidos.getCollectionActual ());
                    DatosCompartidos.getJTreePersonal ().setModel (tmp);
                }
                else if ( ae.getActionCommand ().equals ("ord_a_resultados") )
                {
                    DatosCompartidos.ordenMapF = 3;
                    
                    // Ordenamos los mapas de ficheros del JTree ascendentemente por el numero de resultados de la busqueda
                    
                    MapF[] vMapF = DatosCompartidos.getCollectionActual ().getMapF ();
                    
                    // Creamos una lista a partir del array de mapas de ficheros para poder ordenarlos
                    List list = new ArrayList (Arrays.asList (vMapF));
                    // Los ordenamos
                    Collections.sort (list);
                    
                    // Volvemos a convertir la lista en un array de mapas de ficheros para poder enviarlos al JTreePersonal
                    vMapF = (fmap.model.MapF[])list.toArray (new fmap.model.MapF[list.size ()]);
                    
                    DatosCompartidos.getCollectionActual ().setMapF ( vMapF );
                    
                    TreeModelPersonal tmp = new TreeModelPersonal (DatosCompartidos.getCollectionActual ());
                    DatosCompartidos.getJTreePersonal ().setModel (tmp);
                }
                else if ( ae.getActionCommand ().equals ("ord_d_resultados") )
                {
                    DatosCompartidos.ordenMapF = 4;
                    
                    // Ordenamos los mapas de ficheros del JTree ascendentemente por el numero de resultados de la busqueda
                    
                    MapF[] vMapF = DatosCompartidos.getCollectionActual ().getMapF ();
                    
                    // Creamos una lista a partir del array de mapas de ficheros para poder ordenarlos
                    List list = new ArrayList (Arrays.asList (vMapF));
                    // Los ordenamos
                    Collections.sort (list);
                    
                    // Volvemos a convertir la lista en un array de mapas de ficheros para poder enviarlos al JTreePersonal
                    vMapF = (fmap.model.MapF[])list.toArray (new fmap.model.MapF[list.size ()]);
                    
                    DatosCompartidos.getCollectionActual ().setMapF ( vMapF );
                    
                    TreeModelPersonal tmp = new TreeModelPersonal (DatosCompartidos.getCollectionActual ());
                    DatosCompartidos.getJTreePersonal ().setModel (tmp);
                }
                
            }
        }
    }
}